package com.epalmpay.controller.channel.bonus;

import com.epalmpay.commom.BaseController;
import com.epalmpay.exception.ApplicationException;
import com.epalmpay.status.Rescode;
import com.epalmpay.dto.bonus.BonusAdjustBatchListOutDTO;
import com.epalmpay.dto.bonus.BonusAdjustBatchOutDTO;
import com.epalmpay.dto.bonus.BonusAdjustbatchInDTO;
import com.epalmpay.dto.bonus.BonusMemberOutDTO;
import com.epalmpay.dto.system.PageDTO;
import com.epalmpay.entity.BonusAdjustBatch;
import com.epalmpay.entity.Page;
import com.epalmpay.entity.Userbase;
import com.epalmpay.enumdef.ActivityEnum;
import com.epalmpay.service.bonus.IBonusAdjustBatchService;
import com.epalmpay.service.management.IUserService;
import com.epalmpay.util.Tools;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * Created by gwn on 2017/9/12.
 */
@Controller
@RequestMapping(value="/merchant/bonus")
public class BonusAdjustBatchController extends BaseController{

    @Resource
    private IBonusAdjustBatchService bonusAdjustBatchService;
    @Resource
    private IUserService userService;

    /**
     * 会员积分保存
     */
    @RequestMapping(value="/saveAdjustAmount")
    @ResponseBody
    public BonusAdjustBatchOutDTO saveAdjustAmount(BonusAdjustbatchInDTO BonusAdjustbatchInDTO)throws Exception{
        BonusAdjustBatchOutDTO bonusAdjustBatchOutDTO = new BonusAdjustBatchOutDTO();
        try {
            //保存
            bonusAdjustBatchOutDTO = bonusAdjustBatchService.saveAdjustAmount(BonusAdjustbatchInDTO);
            bonusAdjustBatchOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");

            return bonusAdjustBatchOutDTO;
        } catch (ApplicationException ae) {
            bonusAdjustBatchOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        }
        catch (Exception e) {
            bonusAdjustBatchOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();

        }
        return bonusAdjustBatchOutDTO;
    }

    @ResponseBody
    @RequestMapping(value = "/bonusAdjustBatchList")
    public BonusAdjustBatchListOutDTO bonusAdjustBatchList(BonusAdjustbatchInDTO BonusAdjustbatchInDTO,PageDTO pageDTO)throws Exception{
        BonusAdjustBatchListOutDTO bonusAdjustBatchListOutDTO = new BonusAdjustBatchListOutDTO();
        try {
            Page page= Tools.pageEmtity(pageDTO);

            //获取所有的操作员
            List<Userbase> userbaseList=  userService.queryOperatorList(BonusAdjustbatchInDTO);
            bonusAdjustBatchListOutDTO = bonusAdjustBatchService.queryBonusAdjustBatchList(BonusAdjustbatchInDTO,page);

            bonusAdjustBatchListOutDTO.setUserBaseList(userbaseList);
            bonusAdjustBatchListOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");

            bonusAdjustBatchListOutDTO.setPage(page);
            return bonusAdjustBatchListOutDTO;
        } catch (ApplicationException ae) {
            bonusAdjustBatchListOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        }
        catch (Exception e) {
            bonusAdjustBatchListOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }
        return bonusAdjustBatchListOutDTO;

    }


    /**
     *
     * @param bonusAdjustbatchInDTO
     * @return
     */
    @RequestMapping(value="/editSuccessStatus")
    @ResponseBody
    public BonusAdjustBatchOutDTO editSuccessStatus(BonusAdjustbatchInDTO bonusAdjustbatchInDTO){
        BonusAdjustBatchOutDTO bonusAdjustBatchOutDTO=new BonusAdjustBatchOutDTO();
        try {
            BonusAdjustBatch bonusAdjustBatch = new BonusAdjustBatch();
            bonusAdjustBatch.setGroupId(bonusAdjustbatchInDTO.getGroupId());
            bonusAdjustBatch.setId(bonusAdjustbatchInDTO.getId());
            bonusAdjustBatch.setAuditor(bonusAdjustbatchInDTO.getAuditor());
            bonusAdjustBatch.setAdjustStatus(ActivityEnum.BonusBatchStatus.OutAccounted.getType());
            bonusAdjustBatch.setGmtModified(new Date());
            bonusAdjustBatchService.updateAdjustStatus(bonusAdjustBatch);

            bonusAdjustBatchOutDTO.setErrorCode(Rescode.SUCCESS, "修改成功");

            return bonusAdjustBatchOutDTO;
        } catch (ApplicationException ae) {
            bonusAdjustBatchOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        }
        catch (Exception e) {
            bonusAdjustBatchOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }
        return bonusAdjustBatchOutDTO;
    }
    /**
     *
     * @param bonusAdjustbatchInDTO
     * @return
     */
    @RequestMapping(value="/editFailStatus")
    @ResponseBody
    public BonusAdjustBatchOutDTO editFailStatus(BonusAdjustbatchInDTO bonusAdjustbatchInDTO){
        BonusAdjustBatchOutDTO bonusAdjustBatchOutDTO=new BonusAdjustBatchOutDTO();
        try {
            BonusAdjustBatch bonusAdjustBatch = new BonusAdjustBatch();
            bonusAdjustBatch.setId(bonusAdjustbatchInDTO.getId());
            bonusAdjustBatch.setAuditor(bonusAdjustbatchInDTO.getAuditor());
            bonusAdjustBatch.setGroupId(bonusAdjustbatchInDTO.getGroupId());
            bonusAdjustBatch.setAdjustStatus(ActivityEnum.BonusBatchStatus.Invalided.getType());
            bonusAdjustBatch.setGmtModified(new Date());
            bonusAdjustBatch.setRefuserText(bonusAdjustbatchInDTO.getRefuserText());

            bonusAdjustBatchService.updateFailAdjustStatus(bonusAdjustBatch);

            bonusAdjustBatchOutDTO.setErrorCode(Rescode.SUCCESS, "修改成功");

            return bonusAdjustBatchOutDTO;
        } catch (ApplicationException ae) {
            bonusAdjustBatchOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        }
        catch (Exception e) {
            bonusAdjustBatchOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }
        return bonusAdjustBatchOutDTO;
    }

    /**
     *
     * @param bonusAdjustbatchInDTO
     * @return
     */
    @RequestMapping(value="/viewDetail")
    @ResponseBody
    public BonusAdjustBatchListOutDTO viewDetail(BonusAdjustbatchInDTO bonusAdjustbatchInDTO,PageDTO pageDTO){
        BonusAdjustBatchListOutDTO bonusAdjustBatchListOutDTO = new BonusAdjustBatchListOutDTO();
        BonusMemberOutDTO bonusMemberOutDTO=new BonusMemberOutDTO();
        try {
            Page page= Tools.pageEmtity(pageDTO);

            BonusAdjustBatch bonusAdjustBatch = bonusAdjustBatchService.queryAdjustAmount(bonusAdjustbatchInDTO);
            bonusAdjustbatchInDTO.setAdjustAmount(bonusAdjustBatch.getAdjustAmount());

            bonusAdjustbatchInDTO.setMemberIds(bonusAdjustBatch.getMemberIds());
            bonusAdjustBatchListOutDTO=bonusAdjustBatchService.queryBonusMemberList(bonusAdjustbatchInDTO,page);

            bonusAdjustBatchListOutDTO.setBonusAdjustBatch(bonusAdjustBatch);
            bonusAdjustBatchListOutDTO.setErrorCode(Rescode.SUCCESS, "修改成功");

            bonusAdjustBatchListOutDTO.setPage(page);
            return bonusAdjustBatchListOutDTO;
        } catch (ApplicationException ae) {
            bonusAdjustBatchListOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        }
        catch (Exception e) {
            bonusAdjustBatchListOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }
        return bonusAdjustBatchListOutDTO;
    }

}
